在本教程的这一步骤中,首先为数据源插件中的静态列表定义数据源,然后在 Kanzi Studio 工程中使用以从数据源获取网格列表框 (Grid List Box) 节点中项的数据。
在本节中,您可以添加使数据源插件可以生成列表数据对象的功能。
要添加功能来生成列表数据对象:

//提供为静态列表创建数据对象的功能。 #include "data_object_static_list.hpp"
addDataObject 函数前面创建一个函数,将内存中的 XML 结构的内容转换为静态列表数据对象中的列表项。
//使用此函数将列表项添加到列表数据对象。
static void addListItems(Domain* domain, DataObjectStaticListSharedPtr list, const tinyxml2::XMLElement* itemsElement)
{
for (const tinyxml2::XMLElement* child = itemsElement->FirstChildElement(); child; child = child->NextSiblingElement())
{
//为列表项层级创建根数据对象。
DataObjectSharedPtr rootObject = make_shared<DataObject>(domain, "Item root");
//递归创建列表项树。
addDataObjectsRecursively(domain, rootObject, child);
//将根数据对象中的第一个子项添加为列表项。放弃根对象。
list->addItem(rootObject);
}
}addDataObject 函数添加一个条件,以从列表类型特性创建列表类型数据对象。//添加 XML 元素中的类型特性指定类型的数据对象。//从文本参数获取初始值。
DataObjectSharedPtr addDataObject(Domain *domain, const char* type, const char* name, const char* text)
{
...
//从列表类型特性创建列表数据对象。
else if (type && strcmp(type, "list") == 0)
{
object = make_shared<DataObjectStaticList>(domain, name);
}
...
}addDataObjectsRecursively 函数以添加功能,从而在列表数据对象内创建数据对象。static void addDataObjectsRecursively(Domain* domain, DataObjectSharedPtr parent, const tinyxml2::XMLElement* xml)
{
...
//遍历 XML 文件中的树,为当前 XML 元素的每个子元素添加数据对象。
for (const tinyxml2::XMLElement* child = xml->FirstChildElement(); child; child = child->NextSiblingElement())
{
//递归。
addDataObjectsRecursively(domain, object, child);
}
}static void addDataObjectsRecursively(Domain* domain, DataObjectSharedPtr parent, const tinyxml2::XMLElement* xml)
{
...
//检查当前数据对象的类型是否为列表。
DataObjectStaticListSharedPtr list = dynamic_pointer_cast<DataObjectStaticList>(object);
//遍历 XML 文件中的树,为当前 XML 元素的每个子元素添加数据对象。
for (const tinyxml2::XMLElement* child = xml->FirstChildElement(); child; child = child->NextSiblingElement())
{
//如果列表类型中的 XML 元素名称为项,则在列表数据对象中创建数据对象。
if (list && strcmp(child->Name(), "items") == 0)
{
addListItems(domain, list, child);
}
else
{
//递归。
addDataObjectsRecursively(domain, object, child);
}
}
}
在本节中,设置2D 网格列表框 (Grid List Box 2D) 节点来从插件根据数据源生成的列表数据对象中获取项数据。
要从数据源获取列表数据:
并将XML Data Source File 属性设为 ClusterWithList.xml 文件。ClusterWithList.xml 文件包含在数据源插件工程的 Visual Studio 解决方案中。您可以在 Application/bin 目录中找到该文件。
从 ClusterWithList.xml 文件的内容创建数据对象。






联系人列表现在接收来自 ClusterWithList.xml 数据源的数据。使用文本编辑器来更改 ClusterWithList.xml 文件中的值,保存 ClusterWithList.xml 文件,Kanzi Studio 预览 (Preview) 和数据源 (Data Sources) 窗口会显示更新的数据对象及其值。
在本教程中,您学习了如何定义 XML 数据源以及如何在 Kanzi Studio 中使用该数据源中的数据向 Kanzi 应用程序提供数据。现在您可以:
要详细了解有关 Kanzi 中数据源的信息,请参阅数据源。